#!/bin/sh
# Este script concatena los mensajes si es que viene en mas de una parte y luego inserta en la tabla de mensaje_entrante en db_autoventas_v1
#Autor: Rafael Benegas

#si el evento no es RECEIVED no se continua
if [ "$1" != "RECEIVED" ]; then exit; fi;

#parametros de base de datos
SQL_HOST=localhost
SQL_USER=postgres
SQL_PASSWORD=postgres
SQL_DATABASE=db_autoventas_v1
SQL_TABLE=mensaje_entrante

if grep "UDH-DATA: 05 00 03" $2 >/dev/null; then
	if grep "Alphabet: ISO" $2 >/dev/null || grep "Alphabet: GSM" $2 >/dev/null; then
	  
		# es un mensaje multiparte
		FROM=`formail -zx From: <$2`
		UDHDATA=`formail -zx UDH-DATA: <$2`
		# extraemos la informacion del UDH utilizando awk para convertir hex a dec
		MSGID=`echo "$UDHDATA" | awk '{printf "%d",strtonum("0x"$4)}'`
		PARTS=`echo "$UDHDATA" | awk '{printf "%d",strtonum("0x"$5)}'`
		PART=`echo "$UDHDATA" | awk '{printf "%d",strtonum("0x"$6)}'`
		# renombramos el archivo
		mv $2 "$FROM.$MSGID.$PART"
		# chequeamos que hayan sido recibida todas las porciones
		received=`ls -1 "$FROM.$MSGID."* | wc -l`
		if [ "$PARTS" -eq "$received" ]; then
		# Concatenate all parts
		# copiamos la cabecera de la ultima parte en un fichero nuevo
		formail -X "" <$FROM.$MSGID.$PART >$2.concatenated
		echo "" >>$2.concatenated
		
		#Concatenamos los ficheros con el mismo ID y borramos las partes
		counter=1
		while [ "$counter" -le "$PARTS" ]; do
		  sed -e '1,/^$/ d' <$FROM.$MSGID.$counter >>$2.concatenated
		  rm $FROM.$MSGID.$counter
		  counter=`expr $counter + 1`
		done

		#una vez que hayan sido concatenados insertamos el mensaje resultante en la bd

		#Extre datos del fichero
		FROM=`formail -zx From: < $2`
		TEXT=`formail -I "" < $2 | sed -e"1d"`

		#se escapa el texto
		TEXTSQL=$(echo "$TEXT" | sed 's/\\/\\\\/g' | sed "s/'/\\\'/g")

		#Insert
		sudo -u $SQL_USER psql -U $SQL_USER -d $SQL_DATABASE -c "INSERT INTO $SQL_TABLE (sms,fec_men_ent,num_ori) VALUES ('$TEXTSQL', now(),'$FROM');"

		#renombramos como procesado e incluimos el num.origen al  nombre del fichero
		FECPROC=`date +%d-%m-%Y`
		mv $2 $2.procesado.$FECPROC.$FROM
		fi
	fi
else
	#si no es multiparte, insertamos el mensaje recibido

	#Extre datos del fichero
	FROM=`formail -zx From: < $2`
	TEXT=`formail -I "" < $2 | sed -e"1d"`

	#se escapa el texto
	TEXTSQL=$(echo "$TEXT" | sed 's/\\/\\\\/g' | sed "s/'/\\\'/g")

	#Insert
	sudo -u $SQL_USER psql -U $SQL_USER -d $SQL_DATABASE -c "INSERT INTO $SQL_TABLE (sms,fec_men_ent,num_ori) VALUES ('$TEXTSQL', now(),'$FROM');"
	
	#renombramos como procesado e incluimos el num.origen al  nombre del fichero	FECPROC=`date +%d-%m-%Y`
	mv $2 $2.procesado.$FECPROC.$FROM
fi
